/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.asportoonline.business.delegates;

import java.util.List;
import org.asportoonline.business.beans.ProdottoManager;
import org.asportoonline.entities.Locale;
import org.asportoonline.entities.Prodotto;

/**
 *
 * @author fe
 */
public class ProdottoManagerDelegate extends AbstractDelegate implements ProdottoManager {

    @Override
    protected String getServiceName() {
        return "java:comp/env/ejb/ProdottoManager";
    }

    /**
     * Cerca tutti i Prodotti presenti nel database.
     * 
     * @return restituisce una lista contenente tutti i Prodotti presenti nel database; 
     * se non ce ne sono restituisce null.
     * @see Prodotto
     */
    public List<Prodotto> elencoProdotti() {
        return ((ProdottoManager)getService()).elencoProdotti();
    }

    /**
     * Inserisce un nuovo Prodotto, che deve avere un nome univoco per ogni Locale.
     * 
     * @param prodotto 
     * @see Prodotto
     */
    public void inserisciProdotto(Prodotto prodotto) {
        ((ProdottoManager)getService()).inserisciProdotto(prodotto);
    }

    /**
     * Cerca un prodotto in base al nome e al locale a cui è associato.
     * 
     * @param nome_prodotto nome del prodotto
     * @param locale Locale a cui è associato il prodotto
     * @return restituisce il Prodotto, se esiste, altrimenti null.
     * @see Prodotto
     * @see Locale
     */
    public Prodotto cercaProdottoDelLocale(String nome_prodotto, Locale locale) {
        return ((ProdottoManager)getService()).cercaProdottoDelLocale(nome_prodotto, locale);
    }

    /**
     * Cerca tutti i Prodotti di un Locale.
     * 
     * @param locale Locale di cui si vogliono recuperare i prodotti
     * @return restituisce una lista contenente tutti i Prodotti del Locale locale;
     * se il locale non esiste o non ha nessun prodotto associato restituisce null.
     * @see Prodotto
     * @see Locale
     */
    public List<Prodotto> cercaProdottiDelLocale(Locale locale) {
        return ((ProdottoManager)getService()).cercaProdottiDelLocale(locale);
    }

    /**
     * Cerca un Prodotto in base all'ID.
     * 
     * @param id ID del prodotto.
     * @return se l'ID esiste restituisce il Prodotto, altrimenti restituisce null.
     * @see Prodotto
     */
    public Prodotto cercaProdotto(long id) {
        return ((ProdottoManager)getService()).cercaProdotto(id);
    }

    /**
     * Modifica un prodotto esistente.
     * 
     * @param p Prodotto da modificare 
     * @see Prodotto
     */
    public void aggiornaProdotto(Prodotto p) {
        ((ProdottoManager)getService()).aggiornaProdotto(p);
    }

    /**
     * Cerca tutti i locali che offrono almeno un prodotto di una certa categoria.
     * 
     * @param nomeCategoria nome della categoria 
     * @return restituisce il numero dei locali trovati
     */
    public int numeroLocaliConProdottiDellaCategoria(String nomeCategoria) {
        return ((ProdottoManager)getService()).numeroLocaliConProdottiDellaCategoria(nomeCategoria);
    }

    /**
     * Cerca tutti i locali, di una certa localita, che offrono almeno un prodotto di una certa categoria.
     * 
     * @param nomeCategoria nome della categoria 
     * @return restituisce il numero dei locali trovati
     */
    public int numeroLocaliDiUnaLocalitaConProdottiDellaCategoria(String nomeCategoria, String localita) {
        return ((ProdottoManager)getService()).numeroLocaliDiUnaLocalitaConProdottiDellaCategoria(nomeCategoria, localita);
    }
    
    /**
     * Cerca tutti i locali che offrono almeno un prodotto di una certa categoria.
     * 
     * @param nomeCategoria nome della categoria 
     * @return restituisce una lista contenente tutti i locali trovati; se non ne trova restituisce null
     * @see Locale
     */
    public List<Locale> localiConProdottiDellaCategoria(String nomeCategoria) {
        return ((ProdottoManager)getService()).localiConProdottiDellaCategoria(nomeCategoria);
    }

    /**
     * Cerca tutti i nomi delle categorie offerte dai locali di una certa localita.
     * 
     * @param localita  nome della localita
     * @return restituisce una lista contenente i nomi delle categorie offerte dai locali di una certa localita; se non ne trova restituisce null
     * @see Locale
     */
    public List<String> categorieDeiLocaliDiUnaLocalita(String localita) {
        return ((ProdottoManager)getService()).categorieDeiLocaliDiUnaLocalita(localita);
    }

    /**
     * Cerca tutti i locali, di una certa localita, che offrono almeno un prodotto di una certa categoria.
     * 
     * @param nomeCategoria nome della categoria 
     * @return restituisce una lista contenente tutti i locali trovati; se non ne trova restituisce null
     * @see Locale
     */
    public List<Locale> localiDiUnaLocalitaConProdottiDellaCategoria(String nomeCategoria, String localita) {
        return ((ProdottoManager)getService()).localiDiUnaLocalitaConProdottiDellaCategoria(nomeCategoria, localita);
    }

}
